<?php

require __DIR__ . '/../vendor/autoload.php';

use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;
use Web3\Web3;
use Web3p\EthereumTx\Transaction;

$url = 'https://ropsten.infura.io/v3/8f762549c8c341388ac03552835a0358';
$web3 = new Web3(new HttpProvider(new HttpRequestManager($url, 15)));

$account1 = '0x9Ba6EC8fA4CD0AC4b805c605cEBE4901046c4041';
$account2 = '0xDF7C5453DFFf67579cF74A148424fE2d366E21C3';

$privateKey1 = '85505aa1c1b634c60a24f94dd7209fa8bda2fd46179b15080eff427b0b320a85';
$privateKey2 = 'b109c576f6385f7f740dbae9c12dd109a4f47877a58ae0e738e6ac669dffdf75';

$web3->getEth()->getTransactionCount($account1, function ($err, $res) use ($web3, $account2, $privateKey1) {
    if ($err) {
        return;
    }
    $txCount = '0x' . $web3->getUtils()->toHex($res);

    $wei = $web3->getUtils()->toWei('0.1', 'ether');
    $data = '0x608060405234801561001057600080fd5b506040518060400160405280600781526020017f6d7956616c7565000000000000000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b61030f806101166000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634ed3885e1461003b5780636d4ce63c146100f6575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610179565b005b6100fe610193565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b806000908051906020019061018f929190610235565b5050565b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561022b5780601f106102005761010080835404028352916020019161022b565b820191906000526020600020905b81548152906001019060200180831161020e57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027657805160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760008160009055506001016102bb565b5090565b9056fea265627a7a72315820bf41566c62d211824fc27e17c6df8a63ce9dce8bf7d8b0d039bb481b2e698db664736f6c63430005110032';

    $gasLimit = '0x' . $web3->getUtils()->toHex(1000000);

    $wei = $web3->getUtils()->toWei('10', 'gwei');
    $gasPrice = '0x' . $web3->getUtils()->toHex($wei->toString());

    $txObject = [
        'nonce'    => $txCount,
        'gasLimit' => $gasLimit,
        'gasPrice' => $gasPrice,
        'data'     => $data,
        'chainId'  => 3,
    ];

    $tx = new Transaction($txObject);
    $raw = $tx->sign($privateKey1);

    $web3->getEth()->sendRawTransaction('0x' . $raw, function ($err, $res) {
        if ($err !== null) {
            echo 'Error: ' . $err->getMessage() . PHP_EOL;
            return;
        }

        var_dump('hash: ' . $res);
    });
});
